/*************************************************************************
    > File Name: http.h
    > Author: 侯广臣
    > Mail: 2801059691@qq.com 
    > Created Time: 2021年01月02日 星期六 10时27分10秒
 ************************************************************************/

#ifndef _HTTP_H_
#define _HTTP_H_

#include <stdio.h>
#include <string.h>

#include <unistd.h>
#include <sys/socket.h>
#include <sys/sendfile.h>

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/uio.h>


//HTTP请求方法的枚举类型
enum METHOD{
	METHOD_BAD = 0,		/*请求错误*/
	METHOD_GET, METHOD_POST, METHOD_HEAD, METHOD_OPTIONS,
	METHOD_PUT, METHOD_PATCH, METHOD_DELETE, METHOD_TRACE, METHOD_CONNECT};


//从http客户端的请求中解析出method : 请求方法，URL，如果version参数不为NULL则解析出Http版本信息
//错误返回 -1
int RequestInfo(const char *requestBuf, char *method, char *url, char *version);

//返回请求所代表的整数值，取值范围为 enum NETHOD 所包含类型
int MethodNumber(const char *method);

//如果解析后请求为错误，则调用标准请求错误，sockfd: 客户端套接字
//返回发送的字节数，如果错误返回 -1
int SendBadRequest(int sockfd);

//解析正确后发送的响应头，sockfd: 客户端套接字 contentSzie: 响应体字节数 contentType: 响应体类型
//返回发送的字节数，如果错误返回 -1
int SendResponseHead(int sockfd, int contentSize, const char *contentType);

//发送响应体，sockfd: 客户端套接字 fileName: 需要发送给客户端的文件
//返回发送的字节数，如果错误返回 -1
int SendResponseContent(int sockfd, const char *fileName);

//发送Get请求的回应，错误反胃 -1
int SendGetResponse(int sockfd, const char *fileName);

//把字符串str1, str2连接填充到catString中
//返回填充好的字符串，错误返回 NULL
char* StringCat(char catString[], const char *str1, const char *str2);

#endif
